<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

class scategory extends CI_Model {
	
	var $folderCache = 'mcache/';
    public function __construct() {
        parent::__construct();
		$this->load->model("mcategory");
		$this->load->helper('file');
    }

    /**
     *
     * @param type $term_id 
     * @param type $taxonomy : tên thể loại
     * @param type $number
     * @param type $page
     * @param type $offset
     * @return Danh sách các bài viết thuộc  $term_id và $taxonomy(thể loại: post_tag, link_category, ..)
     * Lấy danh sách bài viết của 1 danh mục, tag, ..
     */
    function term_get_listPost($term_id = 0, $taxonomy = 'category', $number = 5, $page = 0, $offset = 2) {
        $term = array();
        $term_taxonomi = $this->term_get_taxonomy($term_id, $taxonomy);
        if (empty($term_taxonomi))
            return null;
       // $term_relationship = $this->term_relationships_model->get_list_relationship($term_id, $number, $page, $offset);
        $term['info'] = $term_taxonomi;
        $term['listpost'] = $term_relationship;
        return $term;
    }

    /**
     * 
     * Lấy thông tin của 1 term
     */
    public function get_cate_info($cate_id, $taxonomy = 'category') {
      $file_cate = './'.$this->folderCache.'category.php';
        if (!file_exists($file_cate) )
            return '';
        $array_cate = include($file_cate);
	  return (array_key_exists($cate_id,$array_cate)? $array_cate[$cate_id] : 0);
    }

    /**
     * Create file temp of taxonomy
     * File store in temp/post/taxonomy.php 
     */
    public function create_category_file_temp() {
        $data = "<?php \n";
        $data.="return ";
		$this->db->order_by("CAT_PARENT", "asc");
       // $this->db->join("terms", "term_taxonomy.term_id = terms.term_id");
        $cate = $this->mcategory->gets();
        $cate_new = array();
        for($i=0; $i<count($cate); $i++){
            $data_cate = $cate[$i];
            $cate_new[$data_cate->CAT_ID] = (array)$data_cate;
            unset($data_cate);
        }
        $data_temp = var_export($cate_new, true);
        //$data_temp = str_replace(array("[","]"),"'",$data_temp);
        //$data_temp = str_replace(array(")"),"),",$data_temp);
        $data.= $data_temp;
        //  $data.=");\n";
        $data.="?>\n";
        write_file('./'.$this->folderCache.'category.php', $data);
    }
    
    public function create_cat_format_tree(){
        $data = "<?php \n";
        $data.="return ";
        $this->db->order_by('category.CAT_ID','asc');
        $this->db->select('*')->from('category');
        
        $cate = $this->db->get();
        foreach($cate->result() as $r){
            
            $data_cate[$r->CAT_PARENT][] = (array)$r;
        }
        $data_temp = var_export($data_cate, true);
        $data.= $data_temp;
        $data.="?>\n";
        write_file('./'.$this->folderCache.'list_category.php', $data);
    }
	
	public function get_cat_format_tree($cateID = 0) {
		$file_category = './'.$this->folderCache.'list_category.php';
		$table_cate = include($file_category);
		if(array_key_exists($cateID,$table_cate))
			return $table_cate[$cateID];
		else if ($cateID ==0)
			return $table_cate;
		else 
			return false;
	}
	
    /**
     * Tạo ra file chứa các category được format dạng mảng theo chuẩn sub - parent
     * File store in temp/post/tree_taxonomy.php 
     */
    public function create_category_tree() {
	$this->db->order_by("CAT_PARENT asc, CAT_ORDER desc");
       // $this->db->join("terms", "term_taxonomy.term_id = terms.term_id");
        $list_cate = $this->mcategory->gets();
		// $list_cate = (array)$list_cate;
		 $u = array();
        for ($i = 0; $i < count($list_cate); $i++) {
            $r = $list_cate[$i];
            $u[$r->CAT_PARENT][] = $r;
        }
		$list_cate = $u;		
        $arr_cate = $this->buid_tree_cate($list_cate);
        $data = "<?php \n";
        $data.= "return ";
        $data.= var_export($arr_cate, true);
        $data.=";";
        $data.="?>\n";
        write_file('./'.$this->folderCache.'tree_category.php', $data);
    }

    /**
     * Hàm này trả về 1 cấu trúc mảng dạng cây của category
     * @param type $data
     * @param type $parent
     * @return type 
     */
    function buid_tree_cate($data, $parent = 0) {
        $a = "NULL,";
        if (isset($data[$parent])) {
            foreach ($data[$parent] as $rs) {
                if ($a == "NULL,")
                    $a = array();
                $a[$rs->CAT_ID] = $this->buid_tree_cate($data, $rs->CAT_ID);
                unset($t);
            }
        }
        return $a;
    }

    /*
     * $array: là 1 mảng chứa các category đã được format theo dạng array( 0 => array(
      1 => .., theo cấu trúc cha con.
     * $key: là ID của category cần tìm
     * $str: là dấu cách giữa 2 tên category
     */

    function buid_category($array, $key, $pwd, $str = '>') {
        if (is_array($array))
            foreach ($array as $mkey => $mval) {
                $t = $pwd;

                if ($mkey == $key) {
                    return $pwd . $mkey;
                }
                $pwd .= $mkey;

                $tmpre = $this->buid_category($mval, $key, $pwd . $str);

                if ($tmpre)
                    return $tmpre;
                $pwd = $t;
            }
        return '';
    }

    /**
     * function get_category
     * Trả về 1 mảng chứa các thành phần của category parent
     */
    function get_category($idcate = 0, $str = '>') {
        $file_tree_taxonomy = './'.$this->folderCache.'tree_category.php';
        $file_taxonomy = './'.$this->folderCache.'category.php';
        if (!file_exists($file_tree_taxonomy) || !file_exists($file_taxonomy))
            return '';
        $array_cate = include_once($file_tree_taxonomy);
        $table_cate = include($file_taxonomy);
		$list_cate = $this->buid_category($array_cate, $idcate, '', $str);
        if(!$list_cate)
            return array();
        $list_id_cate = explode($str, $list_cate);
        for ($i = 0; $i < count($list_id_cate); $i++){
        if(array_key_exists($list_id_cate[$i],$table_cate))
            $list_id_cate[$i] = $table_cate[$list_id_cate[$i]];
        }
        return $list_id_cate;
    }
	
    public function get_list_category_format_tree($inc_one = true){
        $file_tree_taxonomy = './temp/post/tree_taxonomy.php';
        if (!file_exists($file_tree_taxonomy))
            return '';
		if($inc_one)
			return include_once($file_tree_taxonomy);
		return include($file_tree_taxonomy);
    }
	
	
	
    public function get_crumbs($idcate, $str = '>') {
        $str_crumb = "";
        $arr_crumb = $this->get_category($idcate);
        return $arr_crumb;
    }
	function buid_tree_cate1($data, $parent = 0) {
        $a = "NULL,";
        if (isset($data[$parent])) {
            foreach ($data[$parent]['info'] as $rs) {
                if ($a == "NULL,"){
                    $a = array();
					}
				$a[$rs->CAT_ID]['info'] = $rs;
                $a[$rs->CAT_ID]['data'] = $this->buid_tree_cate1($data, $rs->CAT_ID);
                unset($t);
            }
        }
        return $a;
    }
	 
}

?>
